perm filename X.FAI[TMP,LCS] blob
sn#119574 filedate 1974-09-09 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00010 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002 TITLE X
C00003 00003 RPG MODE:
C00010 00004 DOIT: ANDCM C,BITTAB(D)
C00011 00005 ADDI A,1
C00012 00006 FRD: MOVSI A,'PLX'
C00013 00007 GETNAM: MOVEI A,
C00014 00008 XINI: SKIPE RPGMOD
C00018 00009 XGPOUT: SKIPGE XGSFLG
C00022 00010 FILNAM: 0
C00023 ENDMK
C⊗;
TITLE X
IFNDEF FOONLY{FOONLY←←-1}
A←1
B←2
C←3
D←4
E←5
L←6
U←7
PEN←10
X←11
Y←12
XD←13
T←15
TT←16
P←17
LPDL←←69
DSK←←1
XGP←←2
LMAR←←=0
RMAR←←=1699
WIDTH←←RMAR-LMAR+1
LBUFL←←<WIDTH+43>/44
LSTBIT←←1⊗<LBUFL*44-WIDTH>
OVERLAP←←=50 ;OVERLAP 1/4 INCH
BOTTOM←←=50 ;SHIFT BOTTOM UP 1/4 INCH
IFN FOONLY,<DOFF←←=200 ;NUMBER OF STEPS TO WHERE P STARTS>
IFE FOONLY,<DOFF←←-(LMAR+RMAR+1)/2>
NBUFS←←4
EXTERN JOBREL,JOBFF
MAILBF: BLOCK 40
SIGN: 0
LINE: 0
PNTR: 0
;RPG MODE:
;REGISTER CONTENTS
; 0 FILENAME
; 1 FILEXT,,SPOOL FLAG
; 2 FILPPN
; 3 MAX X,,MIN X IN PLOTTER STEPS ALONG PAPER
; 4 MAX Y,,MIN Y IN PLOTTER STEPS ACROSS PAPER
; 5 GETLIN DONE FROM PLOT PROG
COMMENT ⊗
MINX IS THE DISTANCE FROM THE LEFT EDGE OF THE DRAWING TO THE ORIGIN
MAXX IS THE DISTANCE FROM THE RIGHT EDGE OF THE DRAWING TO THE ORIGIN
MINY IS THE DISTANCE FROM THE BOTTOM EDGE OF THE DRAWING TO THE ORIGIN
MAXY IS THE DISTANCE FROM THE TOP EDGE OF THE DRAWING TO THE ORIGIN
⊗
BEG: JRST NORPG ;NORMAL STARTUP
SETOM RPGMOD
MOVEM 0,FILNAM
MOVEM 0,XGSNAM
HLLZM 1,FILEXT
HRLZM 1,XGSFLG#
MOVSI 1,'XG0'
MOVEM 1,XGSEXT
MOVEM 2,FILPPN
MOVEM 2,XGSPPN
MOVEM 3,RPGX#
MOVEM 4,RPGY#
MOVEM 5,LINE
OUTSTR[ASCIZ/WELCOME TO X!
/]
MOVE 1,['[PLX] ']
MOVE P,[-LPDL,,PDL-1]
PUSHJ P,DETCHK ;CHANGE OUR NAME IF DETACHED
SETNAM 1,
JRST MERGE
NORPG: SETZM RPGMOD#
SETOM LINE
GETLIN LINE ;FOR ERROR PRINTOUT
MERGE: CALLI
HRRZS LINE ;CLEAR LINE BITS
MOVE P,[-LPDL,,PDL-1]
SKIPE RPGMOD
JRST YCHECK ;ALREADY HAVE FILENAME
FILIN: OUTSTR [ASCIZ /FILE?/]
PUSHJ P,FRD
YCHECK: SKIPE RPGMOD
JRST [ HRRE A,RPGY ;GET SMALL Y PASSED TO US
SUBI A,BOTTOM ;FUDGE UP
JRST YDEF] ;AND START THERE
YAGAIN:
OUTSTR [ASCIZ/
PLOT SLICE? (0 OR <CR> FOR SINGLE PAGE PLOTS) /]
SETZ A,
PUSHJ P,RNUM
JRST YAGN1
JUMPL A,YAGAIN
CAIE C,12
JRST YAGAIN
IMUL A,[-WIDTH+OVERLAP]
YAGN1: ADD A,[-BOTTOM]
MOVE B,A
IFN FOONLY,<OUTSTR [ASCIZ/ORIGIN Y OFFSET FROM BOTTOM (DEFAULT IS -1)?/]>
IFE FOONLY,<OUTSTR [ASCIZ/ORIGIN Y OFFSET FROM BOTTOM (DEFAULT IS 4)?/]>
PUSHJ P,RNUM
JRST [ MOVE A,[DOFF]
JRST YDEF]
IMULI A,=100
CAIN C,"." ;DECIMAL POINT?
JRST [ INCHWL C
CAIN C,15
INCHWL C
CAIL C,"0"
CAILE C,"9"
JRST .+1
SUBI C,60
IMULI C,=10
SKIPE SIGN
MOVN C,C
ADD A,C
PUSH P,A
PUSHJ P,RNUM ;JUST GOBBLE THE REST
JFCL
POP P,A
JRST .+1]
MOVN A,A
LSH A,1 ;*2 (MAKE IT STEPS)
YDEFP: CAIE C,12
JRST [ CLRBFI
JRST YAGAIN]
YDEF: SKIPN RPGMOD
ADD A,B
MOVNM A,INIX#
AGAIN: MOVE A,[FILNAM,,LKENT]
BLT A,LKENT+3
OPEN DSK,[14↔'DSK '↔IBUF]
JRST 4,.
INBUF DSK,NBUFS
LOOKUP DSK,LKENT
JRST FNF
ASKLEN: PUSHJ P,XINI
JRST CORLUZ
OUTER: IN DSK,
JRST INOK
STATO DSK,20000
JRST 4,.
RELEAS DSK,
IFN LSTBIT-1,<PUSHJ P,XFIX>
JRST XGPOUT
INOK: MOVN E,IBUF+2
MOVSI E,(E)
HRR E,IBUF+1
MAIN: MOVE C,1(E)
JFFO C,DOIT
AOBJN E,MAIN
JRST OUTER
FNF: PUSHJ P,DETCHK
PUSHJ P,XERR
PUSHJ P,ERRPNT
ASCIZ /LOOKUP FAILED.
/
SKIPGE DET
CALLI 12
SETZM RPGMOD
JRST FILIN
CORLUZ: MOVE T,TT
LSH T,-12
PUSH P,T
PUSHJ P,DETCHK
PUSHJ P,XERR
POP P,T
PUSHJ P,DECOUT
PUSHJ P,ERRPNT
ASCIZ / K OF CORE NEEDED!
/
SKIPGE DET
CALLI 12
SETZM RPGMOD
JRST ASKLEN
LOSE: PUSHJ P,DETCHK
PUSHJ P,XERR
PUSHJ P,ERRPNT
ASCIZ /POINT OUT OF BOUNDS, /
CAIGE Y,(L)
JRST [ PUSHJ P,ERRPNT
ASCIZ/-X/
JRST LOSE1]
PUSHJ P,ERRPNT
ASCIZ/+X/
LOSE1: PUSHJ P,ERRPNT
ASCIZ/, TRY AGAIN!
/
PUSHJ P,CORDWN
SKIPGE DET
CALLI 12
SETZM RPGMOD
JRST AGAIN
DECOUT: IDIVI T,=10
HRLM TT,(P)
SKIPE T
PUSHJ P,DECOUT
HLRZ TT,(P)
ADDI TT,60
ROT TT,-7
MOVEM TT,.+2
PUSHJ P,ERRPNT
0
POPJ P,
ERRPNT: HRRZ TT,(P)
MOVEM TT,PNTR
MOVEI TT,LINE
TTYMES TT,
JRST [ OUTSTR[ASCIZ/TTYMES FAILED /]
OUTSTR @PNTR
OUTSTR[ASCIZ/
/]
JRST .+1]
POP P,TT
HRL TT,(TT)
TLNE TT,376
AOJA TT,.-2
JRST 1(TT)
XERR: PUSHJ P,ERRPNT
ASCIZ/
MESSAGE FROM X WORKING ON /
MOVE TT,FILNAM
PUSHJ P,SIXOUT
PUSHJ P,ERRPNT
ASCIZ/./
HLLZ TT,FILEXT
PUSHJ P,SIXOUT
PUSHJ P,ERRPNT
ASCIZ/[/
MOVE TT,FILPPN
PUSHJ P,SIXOUT
PUSHJ P,ERRPNT
ASCIZ/] : /
POPJ P,
SIXOUT: JUMPE TT,CPOPJ
SETZ T,
LSHC T,6
ADDI T,40
PUSH P,TT
ROT T,-7
MOVEM T,.+2
PUSHJ P,ERRPNT
0
POP P,TT
JRST SIXOUT
DETCHK: SETOM DET#
GETLIN DET
HRRES DET
SKIPL DET
AOS (P)
POPJ P,
DOIT: ANDCM C,BITTAB(D)
XCT MOVI1(D)
XCT MOVI2(D)
DOI3: XCT MOVI3(D)
DOPEN: XCT PEN
IORM B,@X
DONXT: JFFO C,DOIT
AOBJN E,MAIN
JRST OUTER
MOVI1: REPEAT 6,{
HRLI PEN,(<CAIA>)
HRLI PEN,(<TDNN C,(D)>)
JUMPGE B,DOI3
ROT B,-1
SUBI Y,LBUFL+1
ADDI Y,LBUFL+1
}
MOVI2: REPEAT 6,{
JRST DONXT
JRST DONXT
XCT XMOVL(X)
JUMPGE B,DOPEN
CAIGE Y,(L)
CAIL Y,-LBUFL-1(U)
}
MOVI3: REPEAT 6,{
JRST 4,.
JRST 4,.
ROT B,1
XCT XMOVR(X)
JRST LOSE
JRST LOSE
}
ADDI A,1
XMOVL: HRLOI X,XD
REPEAT LBUFL-1,<SUBI X,1>
SOJL A,.+1
MOVE X,[Y,,LBUFL-1]
AOJA A,DOI3
SOJL A,XONR
XMOVR: REPEAT LBUFL-1,<ADDI X,1>
MOVE X,[XD,,LBUFL]
ADDI A,1
XONR: MOVSI X,Y
AOJA A,DOPEN
FRD: MOVSI A,'PLX'
MOVEM A,FILEXT
PUSHJ P,GETNAM
JUMPE A,.+2
MOVEM A,FILNAM
CAIE C,"."
JRST NOEXT
PUSHJ P,GETNAM
MOVEM A,FILEXT
NOEXT: CAIE C,"["
JRST FRDX
PUSHJ P,GETP
HRLZM A,FILPPN
PUSHJ P,GETP
HRRM A,FILPPN
FRDX: INCHRW C
CAIE C,12
JRST FRDX
POPJ P,
RNUM: INCHWL C
CAIN C,15
JRST RNUM
CAIN C,12
POPJ P,
AOS (P)
MOVEI A,
SETZM SIGN
CAIN C,"-"
JRST [ PUSHJ P,RNUML
SETOM SIGN
MOVN A,A
POPJ P,]
CAIN C,"+"
RNUML: INCHWL C
CAIL C,"0"
CAILE C,"9"
JRST RNUMX
IMULI A,12
ADDI A,-"0"(C)
JRST RNUML
RNUMX: CAIN C,15
INCHRW C
POPJ P,
GETNAM: MOVEI A,
MOVE B,[440600,,A]
GETNML: PUSHJ P,RCH
POPJ P,
SUBI C,40
TLNE B,770000
IDPB C,B
JRST GETNML
GETP: MOVEI A,
GETPL: PUSHJ P,RCH
POPJ P,
TRNE A,770000
JRST GETPL
LSH A,6
ADDI A,-40(C)
JRST GETPL
RCH: INCHWL C
CAIN C,42
JRST RCHQ
CAIE C,11
CAIN C," "
JRST RCH
CAIE C,"."
CAIN C,","
POPJ P,
CAIE C,"["
CAIN C,"]"
POPJ P,
RCHQR: CAIGE C,40
POPJ P,
CAIL C,"a"
CAILE C,"z"
CAIA
SUBI C,40
JRST POPJ1
RCHQ: INCHWL C
JRST RCHQR
XINI: SKIPE RPGMOD
JRST [ HLRE A,RPGX ;GET MAX X
HRRE B,RPGX ;AND MIN X
SUB A,B ;FIND DIF
ADDI A,=100 ;LEAVE 1/4 INCH MARGIN AT EACH END
SUBI B,=50 ;INCORPORATE 1/4 INCH INTO MIN X
IMUL B,[-LBUFL-1] ;MAKE IT WORDS IN MEMORY
MOVEM B,IYPOS# ;INITIAL Y POS
JRST XDEF]
XINI1: OUTSTR [ASCIZ /TOTAL LENGTH IN INCHES (X DIMENSION, DEFAULT = 11)?/]
PUSHJ P,RNUM
MOVEI A,=11 ;ASSUME 11 INCHES
JUMPLE A,[XINLER:CLRBFI
JRST XINI1]
CAIE C,12
JRST XINLER
IMULI A,=200
PUSH P,A ;SAVE THIS
YINI1: OUTSTR [ASCIZ \ORIGIN X OFFSET FROM LEFT END(DEFAULT IS 1/2 LENGTH)?\]
PUSHJ P,RNUM
JRST [ MOVE A,(P)
ASH A,-1
IMULI A,LBUFL+1
JRST IYDEF]
CAIE C,12
JRST [ CLRBFI
JRST YINI1]
IMULI A,=200
IMULI A,LBUFL+1
IYDEF: MOVEM A,IYPOS
POP P,A
XDEF: MOVEM A,LINCNT#
MOVEI B,-1(A)
IMULI A,LBUFL+1
MOVE T,JOBFF
MOVEM T,XGPPTR
SOS XGPPTR
MOVEI T,2(A) ;2 EXTRA WORDS
MOVNI TT,(T)
ADD T,XGPPTR
HRLM TT,XGPPTR
MOVE TT,T
CALLI T,11
POPJ P,
HRRZ L,XGPPTR
MOVSI T,1(L)
HRRI T,2(L)
SETZM 1(L)
MOVE U,JOBREL
BLT T,(U)
MOVE TT,[BYTE (12)4001,LMAR,LBUFL]
MOVEM TT,1(L) ;FIRST ONE HAS MARK AND CUT WITH IT
TLZ TT,400000 ;DELETE MARK AND CUT
MOVEI T,1+LBUFL+1(L)
XINL: MOVEM TT,(T)
ADDI T,LBUFL+1
SOJG B,XINL
MOVSI TT,400100
MOVEM TT,(T)
MOVE PEN,[CAIA BYTTAB]
MOVE Y,IYPOS
ADDI Y,2(L)
MOVEI XD,DBUF+1
SKIPL A,INIX ;WHERE DO WE START
JRST MAYBON
SUBI A,43
IDIV A,[-44]
HRLOI X,XD
SOJA A,SETB
MAYBON: ADDI A,43
IDIVI A,44
CAILE A,LBUFL
JRST OFFRT
MOVE X,A
SETZ A,
HRLI X,Y
JRST SETB
OFFRT: MOVE X,[XD,,LBUFL]
SUBI A,LBUFL
SETB: MOVE B,INIX
IDIVI B,44
MOVSI B,400000
MOVN C,C
ROT B,(C)
POPJ1: AOS (P)
CPOPJ: POPJ P,
XGPOUT: SKIPGE XGSFLG
JRST [ OPEN XGP,[17↔'DSK '↔0]
JRST DSKERR
HLLZS XGSEXT
SETZM XGSEXT+1
MOVE A,XGSPPN
ENTER XGP,XGSNAM
JRST DSKERR
MOVEM A,XGSPPN
JRST OUTIT]
OPEN XGP,[1017↔'XGP '↔0]
JRST NOXGP
OUTSTR[ASCIZ/CRANKING XGP
/]
LOCK
OUTIT: OUT XGP,XGPPTR
JRST OUTOK
DSKERR: PUSHJ P,DETCHK
PUSHJ P,XERR
PUSHJ P,ERRPNT
ASCIZ /XGP OUTPUT ERROR.
/
OUTOK: UNLOCK
RELEAS XGP,
SKIPN RPGMOD
JRST XMORE
MOVSI A,1
ADDM A,XGSEXT ;SETUP FOR NEXT PART OF XG.. FILE
MOVN A,INIX
ADDI A,WIDTH-OVERLAP ;MAKE SURE WE CAN TAPE IT
HLRE B,RPGY ;GET MAX Y
SUBI B,OVERLAP ;ACCOUNT FOR OVERLAP IN A
CAMGE A,B ;HIGH ENOUGH YET?
JRST [ OUTSTR[ASCIZ/GOING BACK FOR ANOTHER PASS
/]
JRST YDEF] ;NO, MAKE ANOTHER PASS
XMORE: PUSHJ P,CORDWN ;REALLY DONE, CORE DOWN
PUSHJ P,DETCHK
JRST DODEL ;DELETE AUTOMATICALLY IF DETACHED
OUTSTR[ASCIZ/DELETE PLX FILE?/]
INCHRW C
CAIN C,15
INCHRW C
CAIE C,12
OUTSTR[ASCIZ/
/]
CAIE C,"Y"
CAIN C,"y"
CAIA
JRST NODEL
DODEL: MOVE A,[FILNAM,,LKENT]
BLT A,LKENT+3
INIT DSK,17
'DSK '
0
JRST [ SKIPGE DET
PUSHJ P,XERR
PUSHJ P,ERRPNT
ASCIZ/COULDN'T GET DISK FOR DELETE!
/
JRST NODEL]
LOOKUP DSK,LKENT
JRST [ SKIPGE DET
PUSHJ P,XERR
PUSHJ P,ERRPNT
ASCIZ/LOOKUP FOR DELETE FAILED!
/
JRST NODEL]
MOVE A,FILPPN
MOVEM A,LKENT+3
SETZM LKENT
RENAME DSK,LKENT
CAIA
JRST NODEL
SKIPGE DET
PUSHJ P,XERR
PUSHJ P,ERRPNT
ASCIZ/RENAME FOR DELETE FAILED!
/
NODEL: RELEASE DSK,
SKIPGE DET
PUSHJ P,XERR
PUSHJ P,ERRPNT
ASCIZ/ALL DONE!
/
CALLI 12 ;LEAVE
NOXGP: PUSHJ P,DETCHK
PUSHJ P,XERR
PUSHJ P,ERRPNT
ASCIZ /XGP NOT AVAILABLE (I THOUGHT I WAS WAITING FOR IT)!
/
POPJ P,
XGPPTR: BLOCK 2
IFN LSTBIT-1,<
XFIX: MOVE A,[LSTBIT-1]
MOVE C,LINCNT
HRRZ D,XGPPTR
XFIXL: ANDCAM A,LBUFL-1+2(D)
ADDI D,LBUFL+1
SOJG C,XFIXL
POPJ P,
>
CORDWN: MOVE T,JOBFF
SUBI T,1
CALLI T,11
JRST 4,.
POPJ P,
FILNAM: 0
FILEXT: 0
0
FILPPN: 0
LKENT: BLOCK 4
XGSNAM: 0
XGSEXT: 0
0
XGSPPN: 0
IBUF: BLOCK 3
BITTAB: FOR I←43,0,-1{1⊗I
}
BYTTAB: FOR I←36,0,-6{REPEAT 6,{77⊗I}}
DBUF: BLOCK LBUFL+2
PDL: BLOCK LPDL
END BEG